#ifndef _RS485_COMM_ANALSYE_COMMON_H_
#define _RS485_COMM_ANALSYE_COMMON_H_

#include "FreeRTOS.h"
#include "semphr.h"
#include "stdint.h"
#include "task.h"

#include "device_resource.h"
#define RS485_COM_NUM                  3
#define ONE_COM_CONTANT_SLAVE_UNIT_NUM 12
#pragma pack(1)
/**
 * @brief 保护控制相关参数枚举
 * 包含各类保护功能的使能、阈值、延时等配置项
 */
typedef enum
{
  // 基础保护配置（0x00~0x09）
  CONTROL_CMD = 0x00,             ///< 控制命令
  OVP_ENABLE = 0x01,              ///< 过压保护使能
  OVP_THRESHOLD = 0x02,           ///< 过压保护阈值
  OCP_ENABLE = 0x03,              ///< 过流保护使能
  OCP_THRESHOLD_RATED = 0x04,     ///< 过流保护阈值（额定电流）
  OVP_DELAY_TIME = 0x05,          ///< 过压保护延时时间
  OCP_DELAY_TIME_DEFINITE = 0x06, ///< 过流保护延时时间（定时限）
  UVLO_ENABLE = 0x07,             ///< 欠压保护使能
  UVLO_THRESHOLD = 0x08,          ///< 欠压保护阈值
  UVLO_DELAY_TIME = 0x09,         ///< 欠压保护延时时间

  // 预留区间（0x0A~0x15，共12个位置）
  RESERVED_0A_TO_15 = 0x0A, ///< 预留（0x0A~0x15）

  // 端口过温保护（0x16~0x18）
  PORT_OTP_ENABLE = 0x16,     ///< 端口过温保护使能
  PORT_OTP_THRESHOLD = 0x17,  ///< 端口过温保护阈值
  PORT_OTP_DELAY_TIME = 0x18, ///< 端口过温保护延时时间

  // 预留区间（0x19~0x1B，共3个位置）
  RESERVED_19_TO_1B = 0x19, ///< 预留（0x19~0x1B）

  // 板载过温保护（0x1C~0x1E）
  BOARD_OTP_ENABLE = 0x1C,     ///< 板载过温保护使能
  BOARD_OTP_THRESHOLD = 0x1D,  ///< 板载过温保护阈值
  BOARD_OTP_DELAY_TIME = 0x1E, ///< 板载过温保护延时时间

  // 预留区间（0x1F~0x2D，共15个位置）
  RESERVED_1F_TO_2D = 0x1F, ///< 预留（0x1F~0x2D）

  // 恢复与报警配置（0x2E~0x36）
  OVP_AUTO_RECOVER_ENABLE = 0x2E,     ///< 过压自恢复使能
  UVLO_AUTO_RECOVER_ENABLE = 0x2F,    ///< 欠压自恢复使能
  VOLTAGE_RECOVERY_HYSTERESIS = 0x30, ///< 电压恢复回差值
  OCP_AUTO_RECLOSE_ENABLE = 0x31,     ///< 过流自动重合使能
  OCP_AUTO_RECLOSE_DELAY = 0x32,      ///< 过流自动重合延时时间
  OCP_AUTO_RECLOSE_COUNT = 0x33,      ///< 过流自动重合次数
  OCP_ALARM_THRESHOLD = 0x34,         ///< 过流报警阈值
  USER_CODE = 0x35,                   ///< 用户代码
  AIR_SWITCH_TRIP_ALARM_MODE = 0x36,  ///< 空开断开告警方式

  // 请求状态（0xF0及以后，保持原定义）
  REQUEST_STATUS_1800_181B = 0xF0, ///< 请求状态（1800_181B）
  REQUEST_STATUS_1824_1828 = 0xF1, ///< 请求状态（1824_1828）
  REQUEST_STATUS_18A4_18B5 = 0xF2, ///< 请求状态（18A4_18B5）
  REQUEST_STATUS_1900_190E = 0xF3, ///< 请求状态（1900_190E）
  REQUEST_STATUS_3000_3009 = 0xF4, ///< 请求状态（3000_3009）
  REQUEST_STATUS_3016_301E = 0xF5, ///< 请求状态（3016_301E）
  REQUEST_STATUS_302E_3036 = 0xF6, ///< 请求状态（302E_3036）
} ProtectionCtrlEnum;

typedef struct ctrl_request_order_struct
{
  uint8_t ctrl_unit_index;
  uint8_t order_type;
  uint16_t order_data;
} CTRL_REQ_ORDER_STRUCT;

typedef struct one_slave_unit_status
{
  uint8_t enable_status;
  uint8_t online_status; //
} ONE_SLAVE_UNIT_STATUS_ST;

typedef struct one_unit_status
{
  uint8_t enable_status;
  uint16_t status;
} ONE_UNIT_STATUS_ST;

/**
 * @brief
 *
 */
typedef struct one_com_status
{
  /**
     * @brief
     */
  uint8_t status;
  uint8_t request_current_slave_index;
  uint8_t request_current_slave_step; // 因为cro_st 会被改，所有，保留这个，
  CTRL_REQ_ORDER_STRUCT cro_st;
  struct one_slave_unit_status slave_unit[ONE_COM_CONTANT_SLAVE_UNIT_NUM];

} ONE_COM_ST;

typedef struct all_rs_485_com_status
{

  struct one_com_status com_status;

} RS485_COM_ST;

#define DEBUG_RS485 1
#pragma pack(0)
#endif // !_RS485_COMM_ANALSYE_COMMON_H
